草庐IT

C++ ifstream 到 char *

全部标签

c++ - 为什么fstream不是继承自c++中的ifstream和ofstream?

ifstream和ofstream用于文件中的输入和输出,而fstream可以完成它们的任务但不是继承自ifstream和ofstream,这是代码重复还是别的什么? 最佳答案 您必须向作者BjarneStroustrup寻求明确的答案。在他发表于1985年USENIXProceedings的关于iostreams的原始论文中,他似乎非常强调效率:Inlineexpandedfunctionsareusedforthebasicoperations(like"putacharacterintoabuffer"),sothebasic

c++ - C++0x 中 char 和 Unicode 的符号

从C++0x工作草案开始,用于处理Unicode的新字符类型(char16_t和char32_t)将是无符号的(uint_least16_tuint_least32_t将是基础类型)。但据我所知(也许不是很远)没有定义类型char8_t(基于uint_least8_t)。为什么?当您看到为UTF-8字符串文字引入了新的u8编码前缀时,它更加令人困惑......基于老friend(有符号/无符号)char.为什么?更新:有人提议添加一个新类型:char8_tchar8_t:UTF-8字符和字符串的类型(修订版1)http://www.open-std.org/jtc1/sc22/wg21

r data.table和string_elt()错误:如何修复“字符矢量” vs'char'错误?

从r3.3更新到r3.4后,我在使用时有一个错误data.table包裹:STRING_ELT()canonlybeappliedtoa'charactervector',nota'char'有人经历过吗?我正在考虑降级以“修复”此操作。这是我的会话信息:>sessionInfo()Rversion3.4.0(2017-04-21)Platform:x86_64-pc-linux-gnu(64-bit)Runningunder:Ubuntu16.04.2LTSMatrixproducts:defaultBLAS:/usr/lib/libblas/libblas.so.3.6.0LAPACK:/

c++ - 文件/ifstream 的双向迭代器

我需要一个具有双向迭代器/适配器的输入文件流。不幸的是,std::ifstream(和类似的)只能与std::istream_iterator一起使用,它是一种不能向后移动的前向迭代器。(或者我在这里弄错了?)我可以简单地将整个文件加载到内存中,然后在数组上使用更强大的随机访问迭代器;但是我想避免这种情况,并且只阅读我真正需要的内容。可能我真的只需要文件的一小部分。我可以使用Cstdio.h函数以某种方式手动完成,但这会很痛苦。我基本上需要手动实现一个双向迭代器,并牢记它的所有规范。我正在考虑研究boostiostream库,但手册有点让人不知所措,我希望有人能帮助我实现这个特定目标?

c++ - 在 CUDA 内核中使用 char 变量会受到惩罚吗?

我似乎记得得到提示,我应该尽量避免在CUDA内核中使用char,因为SM喜欢32位整数。使用它们会有一些速度损失吗?比如做起来是不是比较慢inta[4];intb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]比chara[4];charb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]在内核代码中?注意事项:我对使用char值进行算术运算、执行比较以及将它们读写到内存中的惩罚很感兴趣。 最佳答案 预先快速说明:在C/C++中,char的符号是实现定义的。当使用ch

c++ - 修改 C++ 字符串对象的底层 char 数组

我的代码是这样的:strings="abc";char*pc=const_cast(s.c_str());pc[1]='x';cout当我使用GCC编译上面的代码片段时,我得到了预期的结果"axc"。我的问题是,以这种方式修改C++字符串的底层char数组是否安全且可移植?或者可能有其他方法可以直接操作字符串的数据?仅供引用,我的目的是编写一些可以被C和C++调用的纯C函数,因此,它们只能接受char*作为参数。从char*到string,我知道涉及复制,惩罚是不利的。那么,任何人都可以提出一些建议来处理这种情况。 最佳答案 对于第

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 是否可以从 C++ 中的模板类型获取 char* 名称

我想获取模板类型的字符串名称(constchar*)。很遗憾,我无法访问RTTI。templatestructSomeClass{constchar*GetClassName()const{return/*magicgoeshere*/;}}所以SomeClasssc;sc.GetClassName();//returns"int"这可能吗?我找不到办法,快要放弃了。感谢您的帮助。 最佳答案 不,它也不能可靠地与typeid一起工作。它将为您提供一些取决于编译器实现的内部字符串。int常见于“int”和“i”之类的东西.顺便说一句,

c++ - 如何将一系列数据从 char 数组复制到 vector 中?

我已将文件内容读入一个char数组,然后将其中的一些数据读入一个vector。如何将char数组的范围复制到vector中?vector和char数组都是同一类型(unsignedchar)。当前代码是这样的:intp=0;for(...){shortlen=(arr[p+1]我想通过使用push_back删除循环来改进这一点,怎么做? 最佳答案 可以使用insert()向vector添加内容。成员函数:vec.insert(vec.end(),arr,arr+len);当然,还有一个assign(),这可能更接近你想做的事情:ve

c++ - 为什么 `std::copy` 在我的测试程序中从 char 缓冲区读取一个 int 比 `memcpy` 慢 5 倍(!)?

这是thisquestion的后续行动我在哪里发布了这个程序:#include#include#include#include#include#include#include#include#includeclassStopwatch{public:typedefstd::chrono::high_resolution_clockClock;//!ConstructorstartsthestopwatchStopwatch():mStart(Clock::now()){}//!Returnselapsednumberofsecondsindecimalform.doubleelapse